package com.kabigon.tiny.dataSource;

import lombok.extern.slf4j.Slf4j;

/**
 * @author xu.biao
 * @version v1.0
 * @Package com.kabigon.tiny.dataSource
 * @data 2022/12/17 19:17
 */
@Slf4j
public class DataSourceType {

    public enum DataBaseType {
        /**
         * 盒马点评
         */
        MASTER,
        /**
         * mall
         */
        SLAVE
    }

    /**
     * 使用ThreadLoacl保证线程安全
     */
    private static final ThreadLocal<DataBaseType> TYPE = new ThreadLocal<>();

    /**
     * 往当前线程设置数据源类型
     *
     * @param dataBaseType
     */
    public static void setDataBaseType(DataBaseType dataBaseType) {
        if (dataBaseType == null) {
            throw new NullPointerException();
        }

        log.info("切换到{}数据源", dataBaseType);
        TYPE.set(dataBaseType);
    }

    /**
     * 获取当前数据类型
     */
    public static DataBaseType getDataBaseType() {
        DataBaseType dataBaseType = TYPE.get() == null ? DataBaseType.MASTER : TYPE.get();
        log.info("获取当前数据源的类型：【{}】", dataBaseType);
        return dataBaseType;
    }

    /**
     * 清空数据类型
     */
    public static void clearDataBaseType() {
        TYPE.remove();
    }

}
